<?php
/**
 * @name CXmlStoreXpath
 * @version 1.0
 * @since June-2008
 * @todo : Xử lý XML Store bằng XPath
 * @package lib
 * @subpackage data
*/
class CXmlStoreXpath extends CXmlStore {
	public $xpath;
	/**
	 * @todo:  Khởi tạo
	 *
	 * @param  string $file_name
	 * @param string $root_query
	 */
	function __construct($file_name, $root_query = false)
	{
		parent::__construct($file_name, $root_query);
	}
	
	/**
	 * Thay đổi xpath
	 *
	 * @param string $xpath
	 */
	function set_xpath($xpath){
		$this->xpath = $xpath;
	}
	
	/**
	 * @todo: Lấy một bản ghi theo $xpath không phụ thuộc cấp
	 *
	 * @return array
	 */
	function select_one_item(){
		$domxpath = new DOMXPath($this->xml->doc);
		if($items = $domxpath->query($this->xpath))
		{
			if($items->length > 0)
			{
				return $this->xml->decode($items->item(0));
			}
		}
		return false;
	}
	
	/**
	 * Lấy cao hơn 1 level của node hiện tại
	 *
	 * @return array
	 */
	function select_parent_item(){
		$domxpath = new DOMXPath($this->xml->doc);
		if($nodes = $domxpath->query($this->xpath) and $nodes->length == 1){
			$parent_node = $nodes->item(0)->parentNode->parentNode;
			return $this->xml->decode($parent_node);
		}
	}
	/**
	 * @todo: Cập nhật record bằng sử dụng Xpath
	 * @deprecated: Chỉ thực hiện được khi tìm được 1 record duy nhất 
	 *
	 * @param string $tag_name
	 * @param array $values
	 */
	function update_one_node($tag_name, $values)
	{
		$domxpath = new DOMXPath($this->xml->doc);
//		echo $this->make_xmlPath($tag_names, $conditions);exit;
		if($nodes = $domxpath->query($this->xpath) and $nodes->length == 1)
		{
			$old_values = $this->xml->decode($nodes->item(0));
			$save_values = array_merge($old_values, $values);
			$nodes->item(0)->parentNode->replaceChild($this->xml->create_element($tag_name, $save_values), $nodes->item(0));
//			$change = false;
//			foreach($values as $name => $value)
//			{
//				if(!isset($old_values[$name]) or $old_values[$name] != $value)
//				{
//					$change = true;
//				}
//
//				$old_values[$name] = $value;
//				if($change)
//				{
////					echo $tag_name;exit;
////					$node1 = $this->xml->create_element($tag_name, $values);
////					print_r($this->xml->decode($node1)); exit;
//					
//					//						$this->xml->doc->save($this->file_name);
					$this->save();
//				}
//			}
			//$nodes[0]->parentNode->appendChild($this->xml->create_element($values));
		}
	}

	/**
	 * Xóa record sử dụng Xpath
	 *
	 */
	function delete_one_node(){
		$domxpath = new DOMXPath($this->xml->doc);
		if($nodes = $domxpath->query($this->xpath) and $nodes->length > 0)
		{
			foreach($nodes as $node)
			{
				$node->parentNode->removeChild($node);
			}
		}
		$this->save();
	}
}
?>